-- ID生成器Lua脚本
-- 使用redis的incr命令生成唯一递增ID，并添加时间戳前缀确保全局唯一性

-- 获取当前时间戳
local timestamp = redis.call('TIME')
local seconds = timestamp[1]
local microseconds = timestamp[2]
local millis = math.floor(microseconds / 1000)

-- 构建毫秒级时间戳（用于ID前缀）
local timePrefix = seconds * 1000 + millis

-- 构建分钟级时间戳（用于Redis键，使同一分钟内的请求共用一个计数器）
local minuteTimestamp = math.floor(seconds / 60) * 60

-- 使用分钟级时间戳作为Redis键
local key = "id:generator:" .. minuteTimestamp
local sequence = redis.call('INCR', key)

-- 设置key过期时间为1天（确保不会无限增长）
redis.call('EXPIRE', key, 86400)

-- 将序列号格式化为4位数，不足前面补0
local formattedSequence = string.format("%04d", sequence)

-- 使用字符串拼接方式组合时间戳和序列号
local id = tostring(timePrefix) .. formattedSequence

-- 返回字符串格式的ID
return id